//package com.tom.jmgd.controller;
//
//
//import com.alibaba.fastjson.JSONObject;
//import com.tom.jmgd.common.DesensitizeUtil;
//import com.tom.jmgd.common.HttpClientUtil;
//import com.tom.jmgd.dao.checkActivity2Dao;
//import com.tom.jmgd.dao.checkActivityDao;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.web.bind.annotation.GetMapping;
//import org.springframework.web.bind.annotation.RequestBody;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//
//import javax.servlet.http.HttpServletResponse;
//import java.io.UnsupportedEncodingException;
//import java.net.URLEncoder;
//import java.rmi.Remote;
//import java.text.ParseException;
//import java.text.SimpleDateFormat;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.UUID;
//
//@RestController
//@Slf4j
//@RequestMapping("/wxLoginExt")
//public class wxLoginExtController {
//    @Autowired
//    checkActivity2Dao activity2Dao;
//    @Autowired
//    checkActivityDao activityDao;
//
//    private final String appId ="wx70daef2b6a5ed56c";
//    private final String appSecret = "270c4f38ede47857f8e414431b52c756";
//
//    /**
//     * 获取微信跳转页面链接，如果用户同意授权，则跳转至回调页面。回调页面没有设置为云枢系统的页面，原历权限的域名用完了
//     * @return 微信跳转页面链接
//     * @throws UnsupportedEncodingException
//     */
//    private String getUrlSnsapiBase(String state) throws UnsupportedEncodingException {
//        log.info(URLEncoder.encode("http://wxht.jmgdyf.com/redirect.php","utf-8"));
//        String url = "https://open.weixin.qq.com/connect/oauth2/authorize";
//        url += "?appid=" + appId;
//        url += "&redirect_uri=" + URLEncoder.encode("http://wxht.jmgdyf.com/redirect.php","utf-8");
//        url += "&response_type=code";
//        url += "&scope=snsapi_base&param=101";
//        url += "&state=" + state +"#wechat_redirect";
//        return url;
//    }
//
//    /**
//     * 接受客户端请求，将当前页面重定向于微信授权页面
//     * @param resp
//     */
//    @GetMapping("/redirectToWeixin")
//    public void redirectToWeixin(String signupType,String activitySignUpID, HttpServletResponse resp)  {
//        String type;
//        String state;
//        try {
//            if(StringUtils.isEmpty(signupType)) {
//                type = "CUSTOMER";
//            } else {
//                type = signupType;
//            }
//            state = signupType + "_" + activitySignUpID;
//            String url = getUrlSnsapiBase(state);
//            resp.sendRedirect(url);
//        }catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 获取手动报名的URL
//     * @param openid
//     * @param busno
//     * @param activityId
//     * @param activitySignupID
//     * @return
//     */
//    private String getSignUpUrl(String openid,String busno,String activityId,String activitySignupID,String signupType) {
//        String url = "http://yuns.jmgdyf.com/el.html?openid=" + openid;
//        url += "&busno=" + busno;
//        url += "&param=" + activityId;
//        url += "&activitySignupID=" + activitySignupID;
//        url += "&signupType=" + signupType;
//        url += "&c=1F0OrZxAChW";
//        return url;
//    }
//    private byte[] getErrResponseText(String orgname,String activityName,String msg) throws UnsupportedEncodingException {
//        StringBuilder sb = new StringBuilder();
//        sb.append("<html>");
//        sb.append("<head>");
//        sb.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />");
//        sb.append("<title>活动报名</title>");
//        sb.append("</head>");
//        sb.append("<body style='background-color: rgb(72, 158, 118)'>");
//        sb.append("<table>");
//        sb.append("<tr><td style='font-size: 60px;'>门店：</td>");
//        sb.append("<td style='font-size: 60px;'>" + orgname + "</td></tr>");
//        sb.append("<tr><td style='font-size: 60px;'>活动：</td>");
//        sb.append("<td style='font-size: 60px;'>" + activityName + "</td></tr>");
//        sb.append("<tr><td colspan=2 style='font-size: 60px;'>" + msg + "</td></tr>");
//        sb.append("</table>");
//        sb.append("</body>");
//        sb.append("</html>");
//        return sb.toString().getBytes("UTF-8");
//    }
//    private byte[] getBackResponseText(String orgname,String activityName,String url,String msg) throws UnsupportedEncodingException {
//        StringBuilder sb = new StringBuilder();
//        sb.append("<html>");
//        sb.append("<head>");
//        sb.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />");
//        sb.append("<title>活动报名</title>");
//        sb.append("</head>");
//        sb.append("<body style='background-color: rgb(72, 158, 118)'>");
//        sb.append("<table>");
//        sb.append("<tr><td style='font-size: 60px;'>门店：</td>");
//        sb.append("<td style='font-size: 60px;'>" + orgname + "</td></tr>");
//        sb.append("<tr><td style='font-size: 60px;'>活动：</td>");
//        sb.append("<td style='font-size: 60px;'>" + activityName + "</td></tr>");
//        sb.append("<tr><td colspan=2 style='font-size: 60px;'>" + msg + "</td></tr>");
//        sb.append("<tr><td colspan='2' align='center' style='font-size: 40px;'>如签到/签退错误，请点击【手工签到】按钮进行签到！</td></tr>");
//        sb.append("<tr><td colspan='2' align='center'><button id='submit' style='width: 320px;height: 80px;font-size: 45px;' onclick='window.location.href=\"" + url + "\"'>手工签到</button></td></tr>");
//        sb.append("</table>");
//        sb.append("</body>");
//        sb.append("</html>");
//        return sb.toString().getBytes("UTF-8");
//    }
//    /**
//     * 返回应答的html
//     * @param orgname
//     * @param activityName
//     * @param cardholder
//     * @param isSignUp
//     * @return
//     * @throws UnsupportedEncodingException
//     */
//    private byte[] getSignUpResponseText(String orgname,String activityName,String cardholder,String telephoneNum,String url,boolean isSignUp) throws UnsupportedEncodingException {
//        StringBuilder sb = new StringBuilder();
//        sb.append("<html>");
//        sb.append("<head>");
//        sb.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />");
//        sb.append("<title>活动报名</title>");
//        sb.append("</head>");
//        sb.append("<body style='background-color: rgb(72, 158, 118)'>");
//        sb.append("<table>");
//        if(isSignUp) {
//            sb.append("<tr><td colspan=2 style='font-size: 90px;'>您已经报名成功，<br>无须再报名了!</td></tr>");
//        }
//        else {
//            sb.append("<tr><td colspan=2 style='font-size: 90px;'>报名成功!</td></tr>");
//        }
//        sb.append("<tr><td colspan=2 style='font-size: 60px;'>具体信息如下：</td></tr>");
//        sb.append("<tr><td style='font-size: 60px;'>门店：</td>");
//        sb.append("<td style='font-size: 60px;'>" + orgname + "</td></tr>");
//        sb.append("<tr><td style='font-size: 60px;'>活动：</td>");
//        sb.append("<td style='font-size: 60px;'>" + activityName + "</td></tr>");
//        sb.append("<tr><td style='font-size: 60px;'>报名人：</td>");
//        sb.append("<td style='font-size: 60px;'>" + cardholder + "</td></tr>");
//        sb.append("<tr><td style='font-size: 60px;'>手机号：</td>");
//        sb.append("<td style='font-size: 60px;'>" + telephoneNum + "</td></tr>");
//        sb.append("<tr><td colspan='2' align='center' style='font-size: 40px;'>如信息显示用错误或需要手工签到，请点击【手工签到】按钮进行报名！</td></tr>");
//        sb.append("<tr><td colspan='2' align='center'><button id='submit' style='width: 320px;height: 80px;font-size: 45px;' onclick='window.location.href=\"" + url + "\"'>手工签到</button></td></tr>");
//        sb.append("</table>");
//        sb.append("</body>");
//        sb.append("</html>");
//        return sb.toString().getBytes("UTF-8");
//    }
//    private String getOpenid(String code) {
//        String openid="";
//        try {
//            String url = "https://api.weixin.qq.com/sns/oauth2/access_token";
//            url += "?appid=" + appId;
//            url += "&secret=" + appSecret;
//            url += "&code=" + code;
//            url += "&grant_type=authorization_code";
//
//            Map<String, Object> rsMap = HttpClientUtil.doGet(url);
//            if (Integer.valueOf(rsMap.get("statusCode").toString()) != -1) {
//                String data = rsMap.get("data").toString();
//                if (StringUtils.isNotEmpty(data)) {
//                    JSONObject jsonObj = JSONObject.parseObject(data);
//                    if (StringUtils.isNotEmpty(jsonObj.getString("openid"))) {
//                        openid = jsonObj.getString("openid");
//                        log.info("---微信openid:" + openid);
//                    }
//                    else {
//                        log.error("---获取微信openid出错:" + data);
//                    }
//                }
//            }
//            else {
//                log.error("---请求微信openid时失败：" + rsMap.get("msg").toString());
//            }
//        }catch (Exception e) {
//            e.printStackTrace();
//        }
//        return openid;
//    }
//    ////检查
//    private boolean isValid(String beginDate,String endDate) throws ParseException {
//        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
//        Date currDate = new Date();
//        String curr = df.format(currDate);
//        return isSignUpValid(curr,beginDate,endDate);
//    }
//    private boolean isSignUpValid(String currDate,String beginDate,String endDate) throws ParseException{
//        ////如果其中有一个为空，都视为不在有效期内
//        if(StringUtils.isEmpty(beginDate) || StringUtils.isEmpty(endDate)) {
//            return false;
//        }
//
//        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
//        Date curr = df.parse(currDate);
//        Date begin = df.parse(beginDate);
//        Date end = df.parse(endDate);
//        if(begin.getTime() <= curr.getTime() && curr.getTime() <= end.getTime()) {
//            return true;
//        }
//        else {
//            return false;
//        }
//    }
//    // 通过code换取网页授权access_token
//    // 此方法会访问微信服务器，是一个长方法
//    /**
//     * 正确时返回{ "access_token":"ACCESS_TOKEN",
//     *              "expires_in":7200,
//     *              "refresh_token":"REFRESH_TOKEN",
//     *              "openid":"OPENID",
//     *              "scope":"SCOPE" }
//     *
//     * 错误时返回{"errcode":40029,"errmsg":"invalid code"}
//     *
//     * @param code
//     * @return mixed
//     */
//    @GetMapping("/codeToAccessToken")
//    public void codeToAccessToken(String code,String state,HttpServletResponse resp) {
//        ///获取openid
//        String openid = "";
//        String busno = "";
//        String signupType="";
//        String activitySignUpID="";
//        String[] parms = state.split("_");
//        signupType = parms[0];
//        activitySignUpID = parms[1];
//
//        ////重定向真正需要的页面。
//        try {
//            Map<String,String> act = null;
//            if(StringUtils.isNotEmpty(activitySignUpID)) {
//                act = activity2Dao.getActivitySignup(activitySignUpID);
//                if(act !=null) {
//                    busno = act.get("busno");
//                    ///判断是否已经过了活动的有效期
//                    if(!isValid(act.get("begindate"),act.get("enddate"))) {
//                        resp.setContentType("text/html;charset=utf-8");
//                        resp.getOutputStream().write(getErrResponseText(act.get("orgname"),act.get("activity_name"),"抱歉，您想参加的活动未开始或已结束，请留意活动的时间！"));
//                        return ;
//                    }
//                }else {
//                    resp.setContentType("text/html;charset=utf-8");
//                    resp.getOutputStream().write(getErrResponseText(act.get("orgname"),act.get("activity_name"),"活动ID不存在！"));
//                    return ;
//                }
//            }
//
//            /////获取openid
//            openid = getOpenid(code);
//            /////如果openid为空，则转到代填写界面
//            if(StringUtils.isEmpty(openid)) {
//                String signupUrl = getSignUpUrl(openid,busno,activitySignUpID,"",signupType);
//                resp.sendRedirect(signupUrl);
//            }
//            int count = 0;
//            ////顾客签到。
//            if(StringUtils.equals("CUSTOMER",signupType)) {
//                /////根据openid获取会员
//                Map<String,String>  mem = activityDao.getMemcardInfoFromOpenId(openid);
//                if(mem != null) {
//                    ///判断是否已经报过名
//                    String signUpId = activity2Dao.getActivitySignUpExists(activitySignUpID, mem.get("telephoneNum"));
//                    String memName = DesensitizeUtil.left(mem.get("cardholder"), 1);
//                    if (StringUtils.isEmpty(signUpId)) {
//                        String uuid = UUID.randomUUID().toString().replace("-", "");
//                        count = activity2Dao.insertActivitySignupLs(uuid,
//                                act.get("name") + "-" + memName,
//                                openid,
//                                busno,
//                                act.get("orgname"),
//                                mem.get("telephoneNum"),
//                                memName,
//                                mem.get("memcardno"),
//                                activitySignUpID,
//                                activitySignUpID,
//                                "参与活动",
//                                "SIGN_UP",
//                                "签到");
//                        if (count > 0) {
//                            String signupUrl = getSignUpUrl(openid, busno, activitySignUpID, uuid,signupType);
//                            resp.setContentType("text/html;charset=utf-8");
//                            resp.getOutputStream().write(getSignUpResponseText(act.get("orgname"), act.get("activity_name"), memName, mem.get("telephoneNum"), signupUrl, false));
//                        }
//                    } else {
//                        count = 1;
//                        String signupUrl = getSignUpUrl(openid, busno, activitySignUpID, signUpId,signupType);
//                        resp.setContentType("text/html;charset=utf-8");
//                        resp.getOutputStream().write(getSignUpResponseText(act.get("orgname"), act.get("activity_name"), memName, mem.get("telephoneNum"), signupUrl, true));
//                    }
//                }
//                if(count == 0) {
//                    String signupUrl = getSignUpUrl(openid,busno,activitySignUpID,"",signupType);
//                    resp.sendRedirect(signupUrl);
//                }
//            } else {
//                ////检查是不是店员扫码，如果是店员扫码，说明是替签到，转到手工签到页面。
//                Map<String,String>  signUpLs = activity2Dao.getActSignupByOpenid(activitySignUpID,openid);
//                if(signUpLs != null) {
//                    String sCreatedTime = signUpLs.get("createdTime");
//                    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//                    Date currDate = new Date();
//                    String sCurrDate = df.format(currDate);
//                    Date signDate = df.parse(sCreatedTime);
//                    long dirr = currDate.getTime() - signDate.getTime();
//                    String actSign = signUpLs.get("act_signup_code");
//                    df = new SimpleDateFormat("dd");
//                    int currDay = Integer.valueOf(df.format(currDate));
//                    int signDay = Integer.valueOf(df.format(signDate));
//                    if (dirr <= 3600000) {
//                        ////在一个小时内签到，视为重复签到
//                        String msg = "您已经" + actSign + ",无需再" + actSign + "," + actSign + "时间为：" + sCreatedTime;
//                        resp.setContentType("text/html;charset=utf-8");
//                        resp.getOutputStream().write(getErrResponseText(act.get("orgname"), act.get("activity_name"), msg));
//
//                    }else if(dirr >=86400000 || currDay != signDay)  {
//                        ////离上次签到隔一天，重新签到
//                        String signupUrl = getSignUpUrl(openid,busno,activitySignUpID,"",signupType);
//                        resp.sendRedirect(signupUrl);
//                    }
//                    else {
//                        //////同一天内签到
//                        String signTypeCode = "签到";
//                        if (StringUtils.equals("签到", actSign)) {
//                            signTypeCode = "签退";
//                        }
//                        String uuid = UUID.randomUUID().toString().replace("-", "");
//                        String pepleType;
//                        if (StringUtils.equals("FACTORY", signUpLs.get("signup_type_code"))) {
//                            pepleType = "厂家";
//                        } else {
//                            pepleType = "国大员工";
//                        }
//                        count = activity2Dao.insertActivitySignupLs(uuid,
//                                act.get("name") + "-" + signUpLs.get("cardholder"),
//                                openid,
//                                busno,
//                                act.get("orgname"),
//                                signUpLs.get("telephone_num"),
//                                signUpLs.get("cardholder"),
//                                signUpLs.get("memcardno"),
//                                activitySignUpID,
//                                activitySignUpID,
//                                pepleType,
//                                signUpLs.get("signup_type_code"),
//                                signTypeCode);
//                        if (count > 0) {
//                            String msg = "您已经" + signTypeCode +","+ signTypeCode + "时间为：" + sCurrDate;
//                            String signupUrl = getSignUpUrl(openid, busno, activitySignUpID, uuid,signupType);
//                            resp.setContentType("text/html;charset=utf-8");
//                            resp.getOutputStream().write(getBackResponseText(act.get("orgname"), act.get("activity_name"), signupUrl,msg));
//                        }
//                    }
//                }else {
//                    /////没有签到记录
//                    String signupUrl = getSignUpUrl(openid,busno,activitySignUpID,"",signupType);
//                    resp.sendRedirect(signupUrl);
//                }
//
//            }
//        }catch (Exception e2) {
//            e2.printStackTrace();
//        }
//    }
//
//    @GetMapping("/deleteActivitySignupLs")
//    public String deleteActivitySignupLs(String id) {
//        String resultStr = "删除失败";
//        if(StringUtils.isNotEmpty(id)) {
//            int count = activity2Dao.deleteActivitySignupLs(id);
//            if(count > 0) {
//                resultStr = "OK";
//            }
//        }
//        return resultStr;
//    }
//    /**
//     * 获取当前是否已经签到的
//     * @param activitySignUpId
//     * @param telphoneNum
//     * @return
//     */
//    @GetMapping("/getActivitySignUpExists")
//    public int getActivitySignUpExists(String activitySignUpId,String telphoneNum,String signUpDate) {
//        int exist = 1;
//        try {
//            Map<String,String> act = activity2Dao.getActivitySignup(activitySignUpId);
//            if(isSignUpValid(signUpDate,act.get("begindate"),act.get("enddate"))) {
//                String signUpID = activity2Dao.getActivitySignUpExists(activitySignUpId, telphoneNum);
//                if (StringUtils.isNotEmpty(signUpID)) {
//                    exist = 1;
//                }else {
//                    exist = 0;
//                }
//            }else {
//                exist = 2;
//            }
//
//        }catch (Exception e) {
//            e.printStackTrace();
//        }
//        return exist;
//    }
//
//}
